Micron Document
Fox's Git Mirrors


Displaying Raw • View renderedDownload

README-RU.md HEAD (530aca49) Text, 6.71 KB

# **RNS-over-HTTP**

Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.

Границы пакетов на HTTP-теле используют то же упрощённое HDLC-фреймирование, что и \\`PipeInterface\\` Reticulum, поэтому несколько пакетов могут передаваться в одном теле запроса или ответа без слияния.

[Не-GitHub-зеркало](https://lavaforge.org/Ivan/RNS-over-HTTP). Кроме того, файлы проекта доступны в сети Reticulum по адресу \\`RNS-over-HTTP\\`.

## **Обзор**

RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель:

* **Сервер**: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы.
* **Клиент**: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет.

Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность.

## **Как это работает**

Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling:

1. Клиент отправляет HTTP POST на сервер с ожидающими HDLC-фреймами в теле запроса.
2. Сервер декодирует входящие пакеты для Reticulum и сразу возвращает исходящую очередь (тоже в HDLC) в теле ответа.
3. Клиент принимает ответ, декодирует фреймы и передаёт пакеты в Reticulum.
4. После настраиваемого интервала опроса клиент повторяет цикл.

## **Особенности**

* **Обход файрволов и DPI**: Туннелирует трафик через стандартные порты HTTP/S (80/443).
* **Двунаправленная связь**: Полнодуплексная передача данных.
* **Совместимое с Pipe фреймирование**: HDLC FLAG/ESC как у \\`PipeInterface\\`.
* **Простая настройка**: Python, \\`httpx\\`, Hypercorn/aioquic для HTTP/2–3 и Reticulum (\\`rns\\`).
* **Надёжность**: Повторное подключение с экспоненциальной задержкой.
* **Гибкость**: Настраиваемые MTU и интервал опроса.
* **Совместимость с прокси**: Caddy, Nginx и аналоги.
* **Повторное использование соединений**: keep-alive / мультиплексирование.
* **HTTP/1.1, HTTP/2 и HTTP/3**: \\`http_version = 1|2|3\\` (по умолчанию \\`1\\`).

## **Начало работы**

### **Требования**

* Python 3.10 или новее
* [Poetry](https://python-poetry.org/docs/#installation)

### **Установка**

1. **Установите зависимости через Poetry** (из корня репозитория):

\\`\\`\\`bash
poetry install
\\`\\`\\`

2. **Установите пользовательский интерфейс:** скопируйте \\`HTTPInterface.py\\` в каталог интерфейсов Reticulum, например \\`~/.reticulum/interfaces/\\`.

### **Тесты**

\\`\\`\\`bash
poetry run pytest -m "not live"
poetry run pytest -m live
\\`\\`\\`

## **Конфигурация**

Добавьте блок интерфейса в \\`~/.reticulum/config\\` на сервере и на клиенте. Поле \\`type\\` должно совпадать с именем модуля (\\`HTTPInterface\\`).

### **Конфигурация сервера**

\\`\\`\\`ini
[[HTTP Server Interface]]
type = HTTPInterface
enabled = true
mode = server
listen_host = 0.0.0.0
listen_port = 8080
mtu = 4096
check_user_agent = true
user_agent = RNS-HTTP-Tunnel/1.0
\\`\\`\\`

### **Конфигурация клиента**

\\`\\`\\`ini
[[HTTP Client Interface]]
type = HTTPInterface
enabled = true
mode = client
server_url = http://your-server-ip-or-domain:8080/
poll_interval = 0.1
mtu = 4096
user_agent = RNS-HTTP-Tunnel/1.0
\\`\\`\\`

## **Параметры конфигурации**

### Общие

* \\`mtu\\`: максимальный размер пакета в байтах (по умолчанию \\`4096\\`)
* \\`user_agent\\`: строка User-Agent (по умолчанию \\`RNS-HTTP-Tunnel/1.0\\`)

### Режим сервера

* \\`mode = server\\`
* \\`listen_host\\` (по умолчанию \\`0.0.0.0\\`)
* \\`listen_port\\` (по умолчанию \\`8080\\`)
* \\`check_user_agent\\` (по умолчанию \\`true\\`)
* \\`serve_html_page\\` / \\`html_file_path\\`: необязательная HTML-страница на GET \\`/\\`

### Режим клиента

* \\`mode = client\\`
* \\`server_url\\` (обязателен)
* \\`poll_interval\\` (по умолчанию \\`0.1\\`)
* \\`http_version = 1|2|3\\` (по умолчанию \\`1\\`)
* для \\`2\\` и \\`3\\`: \\`https://\\`, на сервере \\`tls_certfile\\` / \\`tls_keyfile\\`
* \\`tls_verify\\` / \\`tls_ca_certs\\` на клиенте
* \\`pool_connections\\` / \\`pool_maxsize\\` / \\`keepalive_timeout\\`

## **Обратный прокси (пример Caddy)**

\\`\\`\\`caddy
example.yourdomain.com {
reverse_proxy 127.0.0.1:8080
header {
-Server
X-Content-Type-Options nosniff
}
}
\\`\\`\\`

## **Безопасность**

* Используйте HTTPS там, где возможно.
* По умолчанию сервер проверяет User-Agent. Задайте одинаковый \\`user_agent\\` на обеих сторонах или отключите проверку через \\`check_user_agent = false\\`.

## **Лицензия**

Проект распространяется под [лицензией MIT](LICENSE).

Served by rngit 1.4.1 - Generated in 0.14s